//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "PuntoVector3D.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
PuntoVector3D::PuntoVector3D(){
        x=0;
        y=0;
        z=0;
        pv=0;
}

PuntoVector3D::PuntoVector3D(float x2, float y2, float z2, int pv2){
        x=x2;
        y=y2;
        z=z2;
        pv=pv2;
}


void PuntoVector3D::setXYZPV(float x2, float y2, float z2, int pv2){
        x=x2;
        y=y2;
        z=z2;
        pv=pv2;
}
float PuntoVector3D::getX(){
        return x;
}

float PuntoVector3D::getY(){
        return y;
}

float PuntoVector3D::getZ(){
        return z;
}

int PuntoVector3D::getPV(){
        return pv;
}

void PuntoVector3D::sumar(PuntoVector3D * pv2){
        //suponemos que sumamos punto y vector
        x=x+pv2->getX();
        y=y+pv2->getY();
        z=z+pv2->getZ();
}

PuntoVector3D * PuntoVector3D::clonar(){
        PuntoVector3D *clon= new PuntoVector3D(x,y,z,pv);
        return clon;
}

void PuntoVector3D::normalizar(){
        float mod=modulo();
        x=(float)x/mod;
        y=(float)y/mod;
        z=(float)z/mod; 
}

float PuntoVector3D::productoEscalar(PuntoVector3D* pv2){
        return x*pv2->getX() + y*pv2->getY() + z*pv2->getZ();
}

float PuntoVector3D::modulo(){
        return sqrt(x*x + y*y +z*z);
}

PuntoVector3D* PuntoVector3D::productoVectorial(PuntoVector3D* v){
        float x2=y*v->getZ()-z*v->getY();
        float y2=-(x*v->getZ()-z*v->getX());
        float z2=x*v->getY()-y*v->getX();
        return new PuntoVector3D(x2,y2,z2,0);
}
